package com.lqk.test;

/**
 * @author liqiankun
 * @date 2022/10/31 16:59
 * @description threadLocal测试文件demo01
 *
 * 需求: 线程隔离
 *      在多线程并发场景下, 每个线程中的变量都是互相独立
 *      线程A:    设置(变量1)     获取(变量1)
 *      线程B     设置(变量2)     获取(变量2)
 *
 *      ThreadLocal:
 *          1. set(): 将变量绑定到当前线程中
 *          2. get(): 获取当前线程绑定的变量
 **/

public class MyDemo01 {
    ThreadLocal<String> t1 = new ThreadLocal<>();
    /**
     * 变量
     */
    private String content;

    public String getContent() {
//        return content;
        return t1.get();
    }

    public void setContent(String content) {
//        this.content = content;
        // 变量content绑定到当前线程
        t1.set(content);
    }

    public static void main(String[] args) {
        MyDemo01 demo = new MyDemo01();
        for (int i = 0; i < 5; i++) {
            Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    /*
                        每个线程: 存一个变量, 过一会儿, 取出这个变量
                     */
                    demo.setContent(Thread.currentThread().getName() + "的数据");
                    System.out.println("-------------------------");
                    System.out.println(Thread.currentThread().getName() + "---->" + demo.getContent());
                }
            });
            // 线程0~4
            thread.setName("线程"+i);
            thread.start();
        }
    }
}
